# 随机字符串生成器
import random
import re
import string
from typing import Optional


def generate_random_string(length: int = 6, include_uppercase: bool = True) -> str:
    """
    生成指定长度的随机字符串。

    Args:
        length (int): 随机字符串的长度，默认为6。
        include_uppercase (bool, optional): 是否包含大写字母，默认为True。

    Returns:
        str: 生成的随机字符串。

    Raises:
        ValueError: 当长度小于等于0时抛出异常。
    """
    if length <= 0:
        raise ValueError("字符串长度必须大于0")

    # 定义基础字符集（小写字母和数字）
    characters = string.ascii_lowercase + string.digits

    # 如果包含大写字母，则添加大写字母到字符集
    if include_uppercase:
        characters += string.ascii_uppercase

    # 从字符集中随机选择指定长度的字符
    random_string = "".join(random.choice(characters) for _ in range(length))
    return random_string


def is_blank(s: Optional[str]) -> bool:
    return s is None or s.strip() == ""


def is_not_blank(s: Optional[str]) -> bool:
    return not is_blank(s)


def to_camel_case(s: str, sep: str = "-") -> str:
    """将 kebab-case 或 snake_case 转为 camelCase"""
    parts = s.split(sep)
    return parts[0] + "".join(word.capitalize() for word in parts[1:])


def camel_to_snake(name: str) -> str:
    """驼峰转蛇形"""
    return re.sub(r"(?<!^)(?=[A-Z])", "_", name).lower()


def capitalize(s: str) -> str:
    """首字母大写"""
    return s[:1].upper() + s[1:] if s else s
